Learn in 10 minutes

Learn in 10 minutes

10分で学ぶRuby

Rubyは、エレガントな構文と開発者フレンドリーな機能で知られる動的オブジェクト指向プログラミング言語です。このチュートリアルでは、Rubyの核となる概念を素早く学べるように解説します。

1. 最初のRubyプログラムを書く

シンプルなプログラムから始めましょう。hello.rbというファイルを作成し、以下のコードを入力します:

puts "Hello, World!"

ファイルを保存し、ターミナルで以下のコマンドを実行します:

ruby hello.rb

出力結果:

Hello, World!

このシンプルなプログラムは、Rubyの基本的な出力機能を示しています。putsメソッドはコンソールにテキスト情報を表示するために使用されます。

2. 基本構文

Rubyの構文はクリーンで読みやすく、自然で直感的に設計されています。

# これはコメントです
puts "Hello, World!"

Rubyの基本構文ルール:

  • コメント: 単一行コメントは#で始まり、複数行コメントは=begin=endを使用します。
  • ステートメント: 通常1行に1つのステートメント、末尾にセミコロン;は不要です。
  • コードブロック: do...endまたは中括弧{}で定義します。
  • メソッド呼び出し: 引数のないメソッド呼び出しでは括弧は省略可能です。

複数行コメントの例:

=begin
これは複数行コメントで、
複数行にまたがります。
=end

3. 変数とデータ型

Rubyでは、変数は動的型付けされ、明示的な型宣言は必要ありません。

基本的な変数命名規則

  • 変数名には文字、数字、アンダースコアのみ使用できます。
  • 変数名は数字で始めることはできません。
  • 変数名は大文字と小文字を区別します。
  • Rubyのキーワードは変数名として使用できません。

Rubyの主な基本データ型

  • 整数(Integer): 例:42 または -10
  • 浮動小数点数(Float): 例:3.14 または 2.5e3
  • 文字列(String): 例:"hello" または 'world'、シングルクォートまたはダブルクォートを使用
  • ブール値(Boolean): true または false
  • Nil(Nil): nilで表され、nullまたは値がないことを示します
  • シンボル(Symbol): 例::name、不変の識別子

3.1 数値型

Rubyは整数と浮動小数点数をサポートしています。

# 整数
age = 25
population = 1_000_000  # 読みやすさのためのアンダースコア

# 浮動小数点数
temperature = 36.5
pi = 3.14159

# 演算
puts 10 + 5   # 15
puts 10 / 3   # 3(整数除算)
puts 10.0 / 3 # 3.333...(浮動小数点数除算)

3.2 文字列

文字列は文字のシーケンスで、シングルクォートまたはダブルクォートで囲みます。

single_quote = 'シングルクォート文字列'
double_quote = "ダブルクォート文字列"
multiline = "これは
複数行の文字列です"

# 文字列補間(ダブルクォートのみ)
name = "Alice"
greeting = "Hello, #{name}!"
puts greeting  # "Hello, Alice!"

文字列操作:

text = "Rubyプログラミング"
puts text.length        # 文字列の長さ
puts text.upcase        # 大文字に変換
puts text.downcase      # 小文字に変換
puts text[0]            # 最初の文字にアクセス
puts text[0..3]         # 文字列スライス
puts text.include?("Ruby")  # 包含チェック

3.3 ブール型

ブール型には2つの値があります:truefalse

is_active = true
is_complete = false

# ブール演算
result1 = true && false  # false
result2 = true || false  # true
result3 = !true          # false

3.4 Nil型

nilはnullまたは値がない状態を表します。

value = nil

if value.nil?
  puts "値はnullです"
end

3.5 シンボル

シンボルは不変の識別子で、ハッシュのキーとしてよく使用されます。

:name
:email
:created_at

# シンボル vs 文字列
puts :name.object_id == :name.object_id  # true(同じオブジェクト)
puts "name".object_id == "name".object_id  # false(異なるオブジェクト)

4. データ構造

Rubyはデータの格納と操作のためのいくつかの組み込みデータ構造を提供します。

4.1 配列

配列は複数の値を保持できる順序付きコレクションです。

numbers = [1, 2, 3, 4, 5]
numbers.push(6)        # 要素を追加
numbers.unshift(0)     # 先頭に挿入
numbers.delete(3)      # 特定の値を削除
numbers[0] = 10        # 要素を変更
puts numbers.inspect   # [10, 2, 4, 5, 6]

配列操作:

numbers = [10, 20, 30, 40, 50]
puts numbers[1..3]     # [20, 30, 40]
puts numbers.first     # 10
puts numbers.last      # 50
puts numbers.include?(30)  # true

4.2 ハッシュ

ハッシュはキーと値のペアのコレクションで、他の言語の辞書に似ています。

student = {
  name: "John",
  age: 20,
  major: "Computer Science"
}

# ハッシュへのアクセスと変更
puts student[:name]
student[:age] = 21
student[:gpa] = 3.8

# ハッシュの反復処理
student.each do |key, value|
  puts "#{key}: #{value}"
end

5. 制御構造

Rubyはプログラムの実行を管理するためのいくつかの制御構造ステートメントを提供します。

5.1 if文

if文は条件を評価し、条件が真の場合にブロックを実行します。

age = 20
if age >= 18
  puts "成人"
elsif age >= 13
  puts "ティーン"
else
  puts "子供"
end

# 一行のif
puts "成人" if age >= 18

5.2 unless文

unlessifの反対で、条件が偽の場合に実行します。

age = 15
unless age >= 18
  puts "成人ではありません"
end

# 一行のunless
puts "成人ではありません" unless age >= 18

5.3 case文

case文は複数の条件を処理するためのクリーンな方法を提供します。

grade = "B"

case grade
when "A"
  puts "優秀"
when "B"
  puts "良好"
when "C"
  puts "平均"
else
  puts "改善が必要"
end

5.4 ループ

Rubyは様々なループ構造をサポートしています。

whileループ

count = 0
while count < 5
  puts count
  count += 1
end

untilループ

count = 0
until count >= 5
  puts count
  count += 1
end

forループ

for i in 0..4
  puts i
end

eachイテレータ

(0..4).each do |i|
  puts i
end

# 配列での使用
fruits = ["apple", "banana", "cherry"]
fruits.each do |fruit|
  puts fruit
end

breakとnext

(0..9).each do |i|
  break if i == 5     # ループを抜ける
  next if i % 2 == 0  # 偶数をスキップ
  puts i              # 出力: 1, 3
end

6. メソッド

Rubyのメソッドはdefキーワードを使用して定義します。

基本的なメソッド定義

def greet(name)
  "Hello, #{name}!"
end

# メソッドの呼び出し
message = greet("John")
puts message

デフォルトパラメータ

def greet(name, greeting = "Hello")
  "#{greeting}, #{name}!"
end

puts greet("Alice")          # "Hello, Alice!"
puts greet("Bob", "Hi")      # "Hi, Bob!"

可変長引数

def sum_numbers(*numbers)
  numbers.sum
end

puts sum_numbers(1, 2, 3, 4)  # 10

キーワード引数

def create_person(name:, age:, city: "Unknown")
  { name: name, age: age, city: city }
end

person = create_person(name: "Alice", age: 25)
puts person.inspect

7. ブロックとProc

ブロックはメソッドに渡すことができるコードの塊です。

ブロックの使用

# do...endの使用
3.times do
  puts "Hello!"
end

# 中括弧の使用
3.times { puts "Hello!" }

# パラメータ付きブロック
(1..3).each do |number|
  puts "Number: #{number}"
end

Yieldキーワード

def run_block
  puts "ブロックの前"
  yield
  puts "ブロックの後"
end

run_block { puts "ブロックの中" }

Proc

Procはブロックをカプセル化するオブジェクトです。

square = Proc.new { |x| x * x }
puts square.call(5)  # 25

# メソッドへのProcの渡し
def apply_operation(numbers, operation)
  numbers.map { |n| operation.call(n) }
end

numbers = [1, 2, 3, 4]
squares = apply_operation(numbers, square)
puts squares.inspect  # [1, 4, 9, 16]

8. クラスとオブジェクト

Rubyは純粋なオブジェクト指向言語で、すべてがオブジェクトです。

基本的なクラス定義

class Person
  def initialize(name, age)
    @name = name
    @age = age
  end

  def introduce
    "I am #{@name}, #{@age} years old"
  end

  def have_birthday
    @age += 1
    "#{@name} had a birthday, now #{@age} years old"
  end
end

# オブジェクトの作成
person1 = Person.new("John", 25)
person2 = Person.new("Jane", 30)

puts person1.introduce
puts person2.have_birthday

アクセサメソッド

class Person
  attr_reader :name    # 読み取りアクセス
  attr_writer :age     # 書き込みアクセス
  attr_accessor :city  # 読み取りと書き込みアクセス

  def initialize(name, age, city)
    @name = name
    @age = age
    @city = city
  end
end

person = Person.new("Alice", 25, "New York")
puts person.name      # "Alice"
person.age = 26       # 年齢を設定
person.city = "Boston" # 都市を設定
puts person.city      # "Boston"

クラスメソッドとクラス変数

class Student
  @@student_count = 0  # クラス変数

  def initialize(name)
    @name = name
    @@student_count += 1
  end

  def self.student_count  # クラスメソッド
    @@student_count
  end
end

student1 = Student.new("John")
student2 = Student.new("Jane")
puts Student.student_count  # 2

継承

class Animal
  def initialize(name)
    @name = name
  end

  def speak
    "#{@name} makes a sound"
  end
end

class Dog < Animal
  def speak
    "#{@name} barks"
  end
end

class Cat < Animal
  def speak
    "#{@name} meows"
  end
end

dog = Dog.new("Buddy")
cat = Cat.new("Mimi")

puts dog.speak  # "Buddy barks"
puts cat.speak  # "Mimi meows"

9. モジュールとMixins

モジュールは関連するメソッドと定数をグループ化するために使用され、クラスにミックスインすることができます。

モジュール定義

module Speakable
  def speak
    "#{@name} says something"
  end
end

class Person
  include Speakable

  def initialize(name)
    @name = name
  end
end

person = Person.new("Alice")
puts person.speak  # "Alice says something"

モジュールによる名前空間

module Math
  PI = 3.14159

  def self.square(x)
    x * x
  end
end

puts Math::PI        # 3.14159
puts Math.square(5)  # 25

10. 例外処理

Rubyはbeginrescueensureraiseを使用した堅牢な例外処理を提供します。

基本的な例外処理

begin
  result = 10 / 0
rescue ZeroDivisionError => e
  puts "ゼロで除算できません: #{e.message}"
else
  puts "除算成功"
ensure
  puts "これは常に実行されます"
end

例外の発生

def divide(a, b)
  raise "ゼロで除算できません" if b == 0
  a / b
end

begin
  result = divide(10, 0)
rescue => e
  puts "エラー: #{e.message}"
end

11. ファイル操作

Rubyはファイルの読み書きのためのシンプルなメソッドを提供します。

ファイルの読み込み

# ファイル全体を読み込み
content = File.read("example.txt")
puts content

# 行ごとに読み込み
File.foreach("example.txt") do |line|
  puts line.chomp
end

ファイルへの書き込み

# ファイルへの書き込み
File.write("output.txt", "Hello, Ruby!\n")

# ファイルへの追記
File.open("output.txt", "a") do |file|
  file.puts "新しいコンテンツを追加"
end

12. 便利な組み込みメソッド

Rubyには多くの便利な組み込みメソッドが付属しています。

文字列メソッド

text = "  Ruby Programming  "
puts text.strip        # 空白を削除
puts text.split(" ")   # 配列に分割
puts text.gsub("Ruby", "Python")  # 置換

配列メソッド

numbers = [3, 1, 4, 1, 5, 9, 2]
puts numbers.sort.inspect      # [1, 1, 2, 3, 4, 5, 9]
puts numbers.uniq.inspect      # [3, 1, 4, 5, 9, 2]
puts numbers.select { |n| n > 3 }.inspect  # [4, 5, 9]

ハッシュメソッド

person = { name: "Alice", age: 25, city: "New York" }
puts person.keys.inspect    # [:name, :age, :city]
puts person.values.inspect  # ["Alice", 25, "New York"]
puts person.has_key?(:age)  # true

13. Ruby Gems

RubyGemsはRubyのパッケージマネージャで、ライブラリのインストールと管理を行います。

Gemのインストール

gem install rails

コードでのGemの使用

require 'json'

# JSONのパース
json_string = '{"name": "Alice", "age": 25}'
person = JSON.parse(json_string)
puts person["name"]  # "Alice"

# JSONの生成
person_hash = { name: "Bob", age: 30 }
json_output = JSON.generate(person_hash)
puts json_output  # {"name":"Bob","age":30}

14. Rubyスタイルガイド

Rubyにはクリーンで読みやすいコードを促進する強力なコミュニティスタイルガイドがあります。

インデント: インデントには2スペースを使用します。

命名規則

  • 変数とメソッド: snake_case
  • クラスとモジュール: CamelCase
  • 定数: SCREAMING_SNAKE_CASE

括弧: 引数を持つメソッド呼び出しには括弧を使用し、引数のないメソッド呼び出しでは省略します。

ブロック: 複数行のブロックにはdo...endを使用し、単一行のブロックには{}を使用します。

Rubyのエレガントな構文と強力な機能は、作業を楽しくします。開発者の幸福と生産性に焦点を当てたその姿勢は、Web開発、スクリプト作成、自動化タスクで人気となっています。